#include <iostream>
using namespace std;
int n, u, v, w;
int mp[50][50];
int path[100];
int vis[100];
bool is_circle = false;
void DFS(int node, int dep)
{

	//基本思路
	//当一个图存在环时,显然在环上的点会经过两次
	//于是记录去过的点,如果在遍历过程中经过了已经去过的点,显然存在环
	for (int i = 1; i <= n; i++)
	{
		if (mp[node][i] && vis[i] == 0) //有边未去才能遍历
		{
			vis[i] = 1; //打标记,为接下来做准备
			DFS(i, dep + 1);
			vis[i] = 0; //去标记,否则会出现误判
						//如以下数据
						//3
						//1 2 1
						//1 3 1
						//3 2 1
						//1→2
						//↓↗
						//3
						//显然此图无环,如果不去标记,就会出现下述情况
						//有1到2的边,vis[2]=1,前往2
						//2无边,回溯
						//有1到3的边,vis[3]=1,前往3
						//有3到2的边,但vis[2]=1,于是有环
		}
		else if (vis[i] == 1 && i != node && mp[node][i]) //有环要满足下述条件:1.i点去过 2.i点不是自己 3.有自己到i点的边
		{
			is_circle = true;
		}
	}
}
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> u >> v >> w;
		mp[u][v] = w;
	}
	vis[1] = 1;
	DFS(1, 1);
	cout << is_circle;
	return 0;
}